home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
demo.exe
/
PRINT.DEM
< prev
next >
Wrap
Text File
|
1992-02-16
|
10KB
|
345 lines
; ----------------------------
; PRINT.DEM - Demoprogramm für die Routinen aus PRINT.LIB
; (für den A86)
;
; (c) Bernd Schemmer 1990 - 1992
; Letzter Update: 15.02.1992
;
; Übersetzen:
; A86 MACROS.MAC PRINT.DEM PRINT.LIB DEMOS.INC TO PRINT.COM
;
; ---------------------------
jmp start ; Daten überspringen
logo db CR,LF
db 'PRINT.DEM - Demoprogramm für die Routinen aus PRINT.LIB'
db CR,LF
db '--------------------------------------------------------'
db CR,LF
db CR,LF
db 'Hinweis: Zu Testzwecken sollte entweder der Drucker OFFLINE geschaltet'
db CR,LF
db ' sein, oder als Ausgabe-Einheit für PRINT das NUL-Device angegeben'
db CR,LF
db ' werden! '
db CR,LF
GETLENGTH logo
db 64xD ; max. Länge des Namens (für die Funktion 0Ah
; des Interrupt 21h)
DefString FileName, 64xD ; Puffer für einen Dateinamen
; Array für die Funktion GetPRINTQueueEntrys
MaxEntrys EQU 8xD ; (max. 8 Einträge)
ArrayOfNames db MaxEntrys dup (65 dup 0)
; ------------------
start:
call ShowLogo ; Logo ausgeben und Speicherblock verkleinern
; DOS-Version überprüfen
TestDOSVersion 3,00
; Überprüfen, ob PRINT geladen ist
call PrintLoaded?
jnc >l1
; Fehler: PRINT nicht geladen
mov al,0
call ShowPrintError
jmp Ende
l1:
call Menue ; Menue ausgeben
or al,al
jz Ende
call Auswahl ; Menuepunkt bearbeiten
jmp start
Ende:
EndProcess 0
; ----------------------------
; Menue
;
; Funktion: Ausgabe des Menues
;
; Ausgabe: AL = gewählter Menuepunkt
; (AL = 0 ->> Programm-Ende)
;
MenueMSG db CR,LF
db 'Zur Verfügung stehende Funktionen:'
db CR,LF
db CR,LF
db '1 - Ausgabe des Status von PRINT'
db CR,LF
db '2 - Einfügen einer Datei in die Warteschlange'
db CR,LF
db '3 - Löschen einer Datei aus der Warteschlange'
db CR,LF
db '4 - Löschen aller Dateien aus der Warteschlange'
db CR,LF
db CR,LF
db '0 - Programm-Ende'
db CR,LF
db CR,LF
db 'Ihre Wahl: '
GETLENGTH MenueMSG
Menue:
WRITE_STRING MenueMSG
Menue0:
mov ah,08h
int 021h
cmp al,ESC ; ESC gedrückt ?
if e mov al,'0'
sub al,'0'
cmp al,4
ja Menue0
push ax ; Eingabe sichern!
call ShowCR_LF
pop ax
ret
; ----------------------------
; Auswahl
;
; Funktion: Ausführen der gewünschten Funktion
;
; Eingabe: AL = Nummer der Funktion
;
Auswahl:
cmp al,1
jne >l1
jmp _ShowPrintStatus
l1:
cmp al,2
jne >l1
jmp _PrintFile
l1:
cmp al,3
jne >l1
jmp _DeleteFile
l1:
cmp al,4
jne >l1
jmp _DeleteFiles
l1:
ret
; ----------------------------
; _ShowPrintStatus
;
; Funktion: Ausgabe des Status von PRINT
;
MakeMsg ShowPrintStatusMSG0, CR,LF, 'Ermitteln des Status von PRINT'
ShowPrintStatusMSG1 db CR,LF
db 'Anzahl Einträge in der Queue von PRINT: '
QUeueEntrys db '?????'
db CR,LF
db '(Dieses Demo kann max. 8 Dateien in der Queue von PRINT anzeigen)'
db CR,LF
db 'Namen der Einträge in der Queue: '
db CR,LF
GETLENGTH ShowPrintStatusMSG1
_ShowPrintStatus:
WRITE_STRING ShowPrintStatusMSG0
; Einträge ermitteln
mov di,offset ArrayOfNames
mov cx,MaxEntrys
call GetPrintQueueEntrys
jnc >l1
; Fehler!
call ShowPrintError
ret
l1:
; Anzahl der Einträge in die Meldung
; eintragen
mov di,offset QueueEntrys
mov ax,cx
call Konvert_AX_To_Dezstring
push cx ; Anahl der Einträge sichern
WRITE_STRING ShowPrintStatusMSG1
pop cx
; Namen der Einträge ausgeben
cmp cx,MaxEntrys
if a mov cx,MaxEntrys
; CX = Anzahl der belegten Einträge im Array
or cx,cx
jz >l1 ; keine Einträge in der Queue vorhanden!
mov si,offset ArrayOfNames
l0:
push si
push cx
lodsb
mov dx,si ; DX -> Name
mov cl,al
xor ch,ch ; CX = Länge des Namens
mov bx,01h
mov ah,040h
int 021h ; Namen ausgeben
call ShowCR_LF
pop cx
pop si
add si,65xD ; SI -> nächstes Array-Element
loop l0
l1:
ret
; ----------------------------
; _PrintFile
;
; Funktion: Einfügen einer neuen Datei in die Queue von PRINT
;
MakeMsg _PrintFileMSG0, CR,LF, 'Einfügen einer neuen Datei in die Queue von PRINT',CR,LF
MakeMsg _PrintFileMSG, CR,LF, 'Datei in die Queue von PRINT eingefügt.',CR,LF
_PrintFile:
WRITE_STRING _PrintFileMsg0
call LeseDateiname ; Namen der Datei ermitteln
; Datei einfügen
mov si,offset FileName
call PrintFile
jnc >l1
; Fehler!
call ShowPrintError
jmp >l2
l1:
WRITE_STRING _PrintFileMSG
l2:
ret
; ----------------------------
; _DeleteFile
;
; Funktion: Löschen einer Datei aus der Queue von PRINT
;
MakeMsg _DeleteFileMSG0, CR,LF, 'Löschen einer Datei aus der Queue von PRINT',CR,LF
MakeMsg _DeleteFileMSG, CR,LF, 'Datei aus der Queue von PRINT gelöscht.',CR,LF
_DeleteFile:
WRITE_STRING _DeleteFileMsg0
; Dateinamen lesen
call LeseDateiname
; Datei aus der Queue löschen
mov si,offset FileName
call DeletePrintQueueEntry
jnc >l1
; Fehler!
call ShowPrintError
jmp >l2
l1:
WRITE_STRING _DeleteFileMSG
l2:
ret
; ----------------------------
; _DeleteFiles
;
; Funktion: Löschen aller Dateien aus der Queue von PRINT
;
MakeMsg _DeleteFilesMSG0, CR,LF, 'Löschen aller Dateien aus der Queue von PRINT',CR,LF
MakeMsg _DeleteFilesMSG, CR,LF, 'Dateien aus der Queue von PRINT gelöscht.',CR,LF
_DeleteFiles:
WRITE_STRING _DeleteFilesMsg0
; Queue löschen
call DeletePrintQueueEntrys
jnc >l1
; Fehler!
call ShowPrintError
jmp >l2
l1:
WRITE_STRING _DeleteFilesMSG
l2:
ret
; ----------------------------
; LeseDateiname
;
; Funktion: Lesen eines Dateinames
;
MakeMsg DateinamenMSG, CR,LF, 'Bitte den Dateinamen eingeben (incl. vollständigen Pfad!): '
LeseDateiname:
WRITE_STRING DateinamenMSG
mov dx,offset FileName-1
mov ah,0Ah
int 021h
call ShowCR_LF
ret
; ----------------------------
; ShowPrintError
;
; Funktion: Ausgabe einer Fehlermeldung
;
; Eingabe: AL = Fehlernummer von PRINT
;
DefString PRINTErrorMSG0, 0, CR,LF, 'Fehler: PRINT nicht geladen!'
DefString PRINTErrorMSG1, 0, CR,LF, 'Fehler: Falsche Funktionsnummer!'
DefString PRINTErrorMSG2, 0, CR,LF, 'Fehler: Datei nicht gefunden!'
DefString PRINTErrorMSG3, 0, CR,LF, 'Fehler: Pfad nicht gefunden!'
DefString PRINTErrorMSG4, 0, CR,LF, 'Fehler: Kein freies Handle mehr vorhanden!'
DefString PRINTErrorMSG5, 0, CR,LF, 'Fehler: Zugriff verweigert!'
DefString PRINTErrorMSG8, 0, CR,LF, 'Fehler: Warteschlange voll!'
DefString PRINTErrorMSG9, 0, CR,LF, 'Fehler: PRINT beschäftigt!'
DefString PRINTErrorMSGC, 0, CR,LF, 'Fehler: Dateiname ist zu lang!'
DefString PRINTErrorMSGF, 0, CR,LF, 'Fehler: Falsches Laufwerk angegeben!'
DefString PRINTUnknownError, 0, CR,LF, 'Fehler: Unbekannter Fehler!'
ShowPrintError:
push dx,cx,si
mov dx,offset PRINTErrorMSG0
cmp al,0
je >l1
mov dx,offset PRINTErrorMSG1
cmp al,1
je >l1
mov dx,offset PRINTErrorMSG2
cmp al,2
je >l1
mov dx,offset PRINTErrorMSG3
cmp al,3
je >l1
mov dx,offset PRINTErrorMSG4
cmp al,4
je >l1
mov dx,offset PRINTErrorMSG5
cmp al,5
je >l1
mov dx,offset PRINTErrorMSG8
cmp al,8
je >l1
mov dx,offset PRINTErrorMSG9
cmp al,9
je >l1
mov dx,offset PRINTErrorMSGC
cmp al,0Ch
je >l1
mov dx,offset PRINTErrorMSGF
cmp al,0Fh
je >l1
mov dx,offset PRINTUnknownError
l1:
mov si,dx
mov cl,[si]
xor ch,ch
inc dx
call OutputMsg
pop si,cx,dx
ret